关于git的学习有一个阶段,如果是从未接触过命令行式开发(Linux、cmd)的萌新的话,建议先去了解下什么是Git,Git有什么用,关于这些网上已经有了很多的介绍了,我也根据我的理解写了一篇关于Git的介绍,点击链接查看 ,同时

Git分支

创建、切换分支

git branch X分支名X :创建分支 x分支名x

git checkout x分支名x :切换到 x分支名x

git checkout -b x分支名x :创建并切换到 x分支名x

合并分支

前面三条命令就是简单的创建分支和切换分支的方式,在创建过分支后,接下来咱们看看如何将两个分支合并到一起。就是说我们新建一个分支,在其上开发某个新功能,开发完成后再合并回主线。

git merge x分支名x

git merge 在 Git 中合并两个分支时会产生一个特殊的提交记录,它有两个父节点,或者说 我要把这两个父节点本身及它们所有的祖先都包含进来。如图所示:

image
image

我们准备了两个分支,每个分支上各有一个独有的提交。这意味着没有一个分支包含了我们修改的所有内容。咱们通过合并这两个分支来解决这个问题。通过 git merge bugFixbugFix 合并到 master 里(注意我们当前的分支在master上)

image
image

首先,master 现在指向了一个拥有两个父节点的提交记录。假如从 master 开始沿着箭头向上看,在到达起点的路上会经过所有的提交记录。这意味着 master 包含了对代码库的所有修改。

此时将分支切换到 bugFix上,执行git merge master 将master分支合并到 bugFix 上

image
image

因为 master 继承自 bugFix,Git 什么都不用做,只是简单地把 bugFix 移动到 master 所指向的那个提交记录。现在所有提交记录的颜色都一样了,这代表每一个分支都包含了代码库的所有修改!

git rebase x分支名x

Rebase 实际上就是取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去。Rebase 的优势就是可以创造更线性的提交历史,如果只允许使用 Rebase 的话,代码库的提交历史将会变得异常清晰。

还是准备了两个分支;注意当前所在的分支是 bugFix(星号标识的是当前分支)我们想要把 bugFix 分支里的工作直接移到 master 分支上。移动以后会使得两个分支的功能看起来像是按顺序开发,但实际上它们是并行开发的。

image
image

当执行过 git rebase master 后,现在 bugFix 分支上的工作在 master 的最顶端,同时我们也得到了一个更线性的提交序列。注意,提交记录 C3 依然存在(树上那个半透明的节点),而 C3’ 是我们 Rebase 到 master 分支上的 C3 的副本。

image
image

需要注意的是,此时的master还未更新,还在C2的位置。此时我们只需要checkout master 切换到master分支,再执行 git rebase bugFix

image
image

由于 bugFix 继承自 master,所以 Git 只是简单的把 master 分支的引用向前移动了一下而已。此时看起来修改记录只有完整的一条记录!


参考记录: